//! previously compiled dependency
//!
-use std::os;
use std::collections::HashMap;
use std::default::Default;
+use std::num::ToPrimitive;
+use std::os;
use std::sync::Arc;
use core::registry::PackageRegistry;
fn scrape_build_config(config: &Config,
jobs: Option<u32>,
target: Option<String>) -> CargoResult<ops::BuildConfig> {
+ let cfg_jobs = match try!(config.get_i64("build.jobs")) {
+ Some((n, p)) => {
+ match n.to_u32() {
+ Some(n) => Some(n),
+ None if n <= 0 => {
+ return Err(human(format!("build.jobs must be positive, \
+ but found {} in {:?}", n, p)));
+ }
+ None => {
+ return Err(human(format!("build.jobs is too large: \
+ found {} in {:?}", n, p)));
+ }
+ }
+ }
+ None => None,
+ };
+ let jobs = jobs.or(cfg_jobs).unwrap_or(os::num_cpus() as u32);
let mut base = ops::BuildConfig {
- jobs: jobs.unwrap_or(os::num_cpus() as u32),
+ jobs: jobs,
requested_target: target.clone(),
..Default::default()
};
expected a string, but found a boolean in [..]config
"));
});
+
+
+test!(bad_cargo_config_jobs {
+ let foo = project("foo")
+ .file("Cargo.toml", r#"
+ [package]
+ name = "foo"
+ version = "0.0.0"
+ authors = []
+ "#)
+ .file("src/lib.rs", "")
+ .file(".cargo/config", r#"
+ [build]
+ jobs = -1
+ "#);
+ assert_that(foo.cargo_process("build").arg("-v"),
+ execs().with_status(101).with_stderr("\
+build.jobs must be positive, but found -1 in [..]
+"));
+});
+
+test!(default_cargo_config_jobs {
+ let foo = project("foo")
+ .file("Cargo.toml", r#"
+ [package]
+ name = "foo"
+ version = "0.0.0"
+ authors = []
+ "#)
+ .file("src/lib.rs", "")
+ .file(".cargo/config", r#"
+ [build]
+ jobs = 1
+ "#);
+ assert_that(foo.cargo_process("build").arg("-v"),
+ execs().with_status(0));
+});
+
+test!(good_cargo_config_jobs {
+ let foo = project("foo")
+ .file("Cargo.toml", r#"
+ [package]
+ name = "foo"
+ version = "0.0.0"
+ authors = []
+ "#)
+ .file("src/lib.rs", "")
+ .file(".cargo/config", r#"
+ [build]
+ jobs = 4
+ "#);
+ assert_that(foo.cargo_process("build").arg("-v"),
+ execs().with_status(0));
+});